home *** CD-ROM | disk | FTP | other *** search
-
- *FOR LOOP
- *USES: AC
- *
- * FOR I,S,E,B
- * .
- * . [LOOP BODY]
- * .
- * NEXT
- *
- *INIT VARIABLE I TO S, DO BODY IF I #= E
- * S AND E ARE CONSTANTS.
- * TESTS AT THE TOP OF THE LOOP (IN THE FOR).
- * INCREMENT BY B (A + OR - CONSTANT)
- * IF B IS OMITTED, -1 IS ASSUMED.
- * IF E IS OMITTED, 1(or -1) IS ASSUMED.
-
- COPY MACROS.LCAC
- COPY MACROS.NEXT
-
- FOR $MACRO A,S,E,B FOR LOOP HEADER
- $IF B.L=0 DEFLT INCR
- $ASG '-1' TO B.S
- $ENDIF
- $VAR I,F,Q,W,WW
- $ASG '$$LPS' TO I.S GET LOOP CNTXT VAR
- $ASG I.SV+1 TO I.SV PUSH CNTXT
- $ASG '$$LP' TO Q.S
- $ASG :Q::I.SV: TO I.SS MAKE THIS CNTXT VAR
- $ASG '$$LAB' TO F.S GET LABEL CNTER
- $ASG F.SV+1 TO F.SV INCR
- $ASG :I.SS: TO W.S SAVE THIS CNTXT NAME
- $ASG F.SV TO W.SV SAVE LABEL VALUE
- V$:F.SV: EQU :B: INCR VALUE
- $ASG 'V$' TO Q.S
- $ASG :Q.S::F.SV: TO WW.S
- LCAC :S: LOAD STRING INDEX
- B F$:W.SV: BEGIN TEST
- I$:W.SV: EQU $ RE-LOOP ENTRY
- $IF WW.SV=-1 IF INCR IS -1
- LAC :A:,0 GET INDEX :A:
- SUB ONE,0 DECR
- $ELSE
- $IF WW.SV=1 IF INCR IS 1
- LAC :A:,0 GET INDEX :A:
- ADD ONE,0 INCR
- $ELSE
- LCAC :B: GET INCR/DECR
- ADD :A:,0 ADD TO INDEX :A:
- $ENDIF
- $ENDIF
- F$:W.SV: EQU $ BEGIN TEST
- SACL :A:,0 SAVE AC TO INDEX :A:
- $IF E.L#=0 IF E IS PRESNT
- $IF WW.SV<0
- LCAC :E:-1 LOAD :E:+1
- $ELSE
- LCAC :E:+1
- $ENDIF
- SUB :A:,0 COMP TO INDEX :A:
- $ENDIF
- BZ E$:W.SV: END LOOP WHEN :A:#=:E:
- $END